package com.lemzdo.community.controller;

import com.lemzdo.community.dto.CommentDTO;
import com.lemzdo.community.dto.CommentUserDTO;
import com.lemzdo.community.dto.ResultDTO;
import com.lemzdo.community.enums.CommentTypeEnum;
import com.lemzdo.community.exception.ErrCodeEnum;
import com.lemzdo.community.model.Comment;
import com.lemzdo.community.model.User;
import com.lemzdo.community.service.CommentService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.List;


@Controller//评论功能的控制层
public class CommentController {

    @Autowired
    private CommentService commentService;

    /**
     * 评论功能(1级评论)，前端通过json格式串传回来相应的信息，控制层进行处理，并返回对应的json串（对象）给前端
     * @param commentDTO 接受前端传回来的json格式串，自动对应封装到dto对象里
     * @param request 上下文request 用于取得session中的user
     * @return 返回json格式串对象给前端
     */
    //需要前端传回来json格式的数据  我们需要评论的内容，type，帖子id
    @RequestMapping(value = "/comment",method = RequestMethod.POST)
    @ResponseBody//返回json格式的对象
    public Object postComment(@RequestBody CommentDTO commentDTO,//接受前端传回来的json串，自动按照name赋值给dto对象
                              HttpServletRequest request){

        //获取session域中的user 并判断
        User user = (User) request.getSession().getAttribute("user");
        if(user == null){
            //用户为空 未登录 传未登录信息给前端
            return ResultDTO.errorOf(ErrCodeEnum.NO_LOGIN);
        }

        //回复内容不能为空的判断
        if(StringUtils.isBlank(commentDTO.getContent())){
            return ResultDTO.errorOf(ErrCodeEnum.CONTENT_IS_EMPTY);
        }



        //新建comment对象 用于存放数据
        Comment comment = new Comment();
        //存放前端传回来的dto中的数据
        comment.setPostId(commentDTO.getPostId());
        comment.setContent(commentDTO.getContent());
        comment.setType(commentDTO.getType());

        //设置其他数据
        comment.setGmtModified(System.currentTimeMillis());
        comment.setGmtCreate(System.currentTimeMillis());
        comment.setAuthorId(user.getId());
        comment.setLikeCount(0L);

        //插入comment到数据库
        commentService.insert(comment);

        //评论成功 返回结果dto给前端
        return ResultDTO.successOf();
    }

    /**
     * 评论功能(2级评论)，前端通过json格式串传回来相应的信息，控制层进行处理，并返回对应的json串（对象）给前端
     * @param id 楼中楼传过来的postId 即对应的一级评论的id
     * @return 返回json格式串对象给前端
     */
    @ResponseBody
    @RequestMapping(value = "/comment/{id}", method = RequestMethod.GET)
    public ResultDTO<List<CommentUserDTO>> comments(@PathVariable(name = "id") Integer id) {
        List<CommentUserDTO> commentUserDTOS = commentService.selectAllByPostId(id, CommentTypeEnum.COMMENT_TYPE_2);
        return ResultDTO.okOf(commentUserDTOS);
    }

}
